/*
JavaScript 能够准确表示的整数范围在-2^53到2^53之间（不含两个端点），
超过这个范围，无法精确表示这个值。
*/
console.log(Math.pow(2, 53) ); // 9007199254740992
console.log(9007199254740992); // 9007199254740992
console.log(9007199254740993); // 9007199254740992
console.log(Math.pow(2, 53) === Math.pow(2, 53) + 1) // true
console.log(Math.pow(2, 54));//18014398509481984

/*
上面代码中，超出 2 的 53 次方之后，一个数就不精确了。

ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量，
用来表示这个范围的上下限。
*/
console.log(Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1) // true
console.log(Number.MAX_SAFE_INTEGER === 9007199254740991) // true
console.log(Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER) //true
console.log(Number.MIN_SAFE_INTEGER === -9007199254740991) // true

// Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。
console.log(Number.isSafeInteger('a') )// false
console.log(Number.isSafeInteger(null)) // false
console.log(Number.isSafeInteger(NaN)) // false
console.log(Number.isSafeInteger(Infinity) ) // false
console.log(Number.isSafeInteger(-Infinity)) // false

console.log(Number.isSafeInteger(3)) // true
console.log(Number.isSafeInteger(1.2)) // false
console.log(Number.isSafeInteger(9007199254740990)) // true
console.log(Number.isSafeInteger(9007199254740992) )// false

console.log(Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1)) // false
console.log(Number.isSafeInteger(Number.MIN_SAFE_INTEGER)) // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)) // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)) // false